/* 
 * File:   Paciente.cpp
 * Author: thiagojesus
 * 
 * Created on May 23, 2012, 8:38 AM
 */

#include "Paciente.h"
#include <iostream>
#include <fstream>
#include "Lista.cpp"
#include <string>

Paciente::Paciente() {
    nome = "";
    
    //c = new Carteira();
}

Paciente::Paciente(const Paciente& orig) {
    nome = orig.nome;
    nasc = orig.nasc;
    c = orig.c;
}

Paciente::~Paciente() {
}

Paciente::Paciente(std::string _nome, int _dia,int _mes,int _ano, Carteira _c){
    this->nome = _nome;
    this->nasc.SetDia(_dia);
    this->nasc.SetMes(_mes);
    this->nasc.SetAno(_ano);
    this->c = _c;
}

void Paciente::imprimirListapac(Listapac* p){
    Paciente *aux;
    ItemCarteira *x;
	aux = *p;
	while (aux != NULL){
            std::cout<<"\tnome: "<<aux->nome<<"\n\t"<<"Data de Nascimento: "<<aux->nasc.GetDia()<<"/"<<aux->nasc.GetMes()<<"/"<<aux->nasc.GetAno()<<"\n Numero Carteira: "<<aux->c.getNumCarteira()<<"\n";
            x = aux->c.getItemcart();
            ItemCarteira::imprimirListaCart(&x);
		aux = aux->prox;
	}
}

void Paciente::salvar(Listapac* p, int npac){
    std::fstream myfile;
    Paciente *aux;
    int cart, i;
    aux = *p;
    myfile.open("paciente.bin",std::ios::out|std::ios::app|std::ios::binary);
    if(!myfile){
        std::cout<<"ERRO!";
    }else{
        //myfile.seekg(parou);
        for(i=0;i<npac;i++){
            cart = (aux->c.getNumCarteira());
            myfile<<aux->nome<<"\n"<<aux->nasc.GetDia()<<"\n"<<aux->nasc.GetMes()<<"\n"<<aux->nasc.GetAno()<<"\n"<<cart;
            aux->c.salvar();
            aux = aux->prox;
        }
        std::cout<<"arquivo criado com sucesso\n";
        myfile.close();
  
    }
}

Paciente* Paciente::pesquisar(Listapac* p_l, std::string n){
    Paciente *aux;
    aux = *p_l;
    while(aux != NULL){
        if(aux->nome==n){
            return aux;
        }else{
            aux = aux->prox;
        }
    }
    return NULL;
}



void Paciente::setNome(std::string nome) {
    this->nome = nome;
}

std::string Paciente::getNome() const {
    return nome;
}

Data Paciente::getNasc() const {
    return nasc;
}

Carteira* Paciente::getC() {
    return &c;
}

long Paciente::carregar(Listapac* p, int npac, long parou, long *pacart){
    std::fstream myfile;
    int ncarteira, i=0, dia, mes, ano;
    long esta=0, carte=0;
    myfile.open("paciente.bin",std::ios::in|std::ios::binary);
    if(!myfile){
        std::cout<<"ERRO!";
    }else{
        myfile.seekg(parou);
        for(i =0; i<npac;i++){
            Paciente *aux = new Paciente();
            getline(myfile,aux->nome);
            myfile>>dia>>mes>>ano>>ncarteira;
            aux->nasc.SetDia(dia);
            aux->nasc.SetMes(mes);
            aux->nasc.SetAno(ano);
            aux->c.setNumCarteira(ncarteira);
            *pacart = aux->c.carregar(carte);
            cadastrar(p,aux);
            }
        //std::cout<<"dados carregados\n";   
            
        esta = myfile.tellg();
        myfile.close();
        return esta;
    }
    
    

}

int Paciente::retnasc() const{
    return nasc.GetAno();
}


